package org.example.projecttwo.service.Iarticle;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.example.projecttwo.entity.article.Article;
import org.example.projecttwo.entity.article.ArticlePartition;
import org.example.projecttwo.entity.dto.content.request.ContentDeleteDTO;
import org.example.projecttwo.entity.dto.content.request.ContentOffShelfDTO;
import org.example.projecttwo.entity.dto.content.response.ArticleDetailVO;

import java.util.List;
import java.util.Map;

/**
 * 文章服务接口
 */
public interface IArticleService extends IService<Article> {

    /**
     * 分页条件查询文章列表
     */
    IPage<Article> pageByCondition(Page<Article> page, Integer status, String partitionCode,
                                   Integer isFeatured, String keyword, String startTime, String endTime);

    /**
     * 获取文章详情
     */
    ArticleDetailVO getArticleDetail(Long id);

    /**
     * 删除文章（逻辑删除）
     */
    void deleteArticle(Long id, ContentDeleteDTO deleteDTO);

    /**
     * 更新文章状态
     */
    void updateStatus(Long id, Integer status);

    /**
     * 下架文章
     */
    void unpublishArticle(Long id, ContentOffShelfDTO offShelfDTO);

    /**
     * 批量更新文章状态
     */
    void batchUpdateStatus(List<Long> ids, Integer status);

    /**
     * 批量下架文章
     */
    void batchUnpublish(List<Long> ids, Integer offShelfReason);

    /**
     * 批量删除文章
     */
    void batchDelete(List<Long> ids, Integer deleteReason, String deleteRemark);

    /**
     * 更新精品状态
     */
    void updateFeaturedStatus(Long id, Integer featured);

    /**
     * 统计已发布文章数量
     */
    int countPublishedArticles();

    /**
     * 审核文章
     */
    void auditArticle(Long id, Integer auditResult, String rejectReason);

    /**
     * 批量审核文章
     */
    void batchAudit(List<Long> ids, Integer auditResult, String rejectReason);

    /**
     * 获取文章统计数据
     */
    Map<String, Integer> getArticleStatistics(Long id);

    /**
     * 获取所有文章分区
     */
    List<ArticlePartition> getAllPartitions();

    /**
     * 保存文章分区
     */
    void savePartition(ArticlePartition partition);

    /**
     * 更新文章分区
     */
    void updatePartition(String code, ArticlePartition partition);

    /**
     * 删除文章分区
     */
    void deletePartition(String code);

    /**
     * 批量保存或更新分区设置
     */
    void saveOrUpdatePartitions(List<ArticlePartition> partitions);

    /**
     * 增加文章浏览量
     */
    void increaseViewCount(Long id);

    /**
     * 获取指定用户的文章草稿
     * @param userId 用户ID
     * @return 文章草稿列表
     */
    List<Article> getUserDraftsByUserId(Long userId);

    /**
     * 删除文章草稿
     */
    void deleteDraft(Long id);

    /**
     * 提交草稿审核
     */
    void submitDraftForAudit(Long id, String coverUrl, Integer publishStrategy, String publishTime);

    /**
     * 分页查询已删除的文章
     * @param page 分页对象
     * @param keyword 关键词搜索
     * @return 分页已删除文章列表
     */
    IPage<Article> pageDeletedArticles(Page<Article> page, String keyword);

    /**
     * 恢复已删除的文章
     * @param ids 文章ID列表
     */
    void restoreDeletedArticles(List<Long> ids);

    /**
     * 永久删除文章
     * @param ids 文章ID列表
     */
    void permanentlyDeleteArticles(List<Long> ids);


}